package com.nifostasky.mqcallback.config;

import com.nifostasky.mqcallback.impl.MsgSendConfirmCallBack;
import com.nifostasky.mqcallback.impl.RabbitReturnCallback;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 生产者(producer) -> 交换机(exchange) 的消息确认
 * 配置
 */
@Configuration
public class CallBackConfig implements InitializingBean {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 设置一个简单的队列
     */
    @Bean(name = "durableQueue")
    public Queue queue() {
        /*
         * 参数1：队列名称
         * 参数2：是否定义持久化队列
         * 参数3：是否独占本次连接
         * 参数4：是否在不使用的时候自动删除队列
         * 参数5：队列其它参数
         */
        return new Queue("helloRabbitMQ", true, false, false, null);
    }

    /**
     *  bean 初始化后执行
     * 设置消息确认回调类
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        // 设置消息确认回调类
        rabbitTemplate.setConfirmCallback(new MsgSendConfirmCallBack());
        // 设置消息回退回调类
        rabbitTemplate.setReturnCallback(new RabbitReturnCallback());
    }
}
